//package com.example.tourism.service.impl;
//
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.data.redis.core.RedisCallback;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.ValueOperations;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//
//
//public class ProductPurchaseService {
//
//    private final RedisTemplate<String, String> redisTemplate;
//
//
//    public ProductPurchaseService(RedisTemplate<String, String> redisTemplate) {
//        this.redisTemplate = redisTemplate;
//    }
//
//    public String purchaseProduct(String productId, String userId) {
//        ValueOperations<String, String> valueOps = redisTemplate.opsForValue();
//        String productKey = "product:" + productId;
//        String userKey = productKey + ":users";
//
//        // 检查商品库存是否存在
//        if (!redisTemplate.hasKey(productKey)) {
//            int stock = queryStockFromDb(productId);
//            valueOps.set(productKey, String.valueOf(stock));
//        }
//
//        return redisTemplate.execute((RedisCallback<String>) connection -> {
//            byte[] productKeyBytes = redisTemplate.getKeySerializer().serialize(productKey);
//            byte[] userKeyBytes = redisTemplate.getKeySerializer().serialize(userKey);
//            byte[] userIdBytes = redisTemplate.getValueSerializer().serialize(userId);
//
//            connection.watch(productKeyBytes); // 监控库存键
//            String stockStr = valueOps.get(productKey);
//            if (stockStr == null) return "库存信息缺失";
//
//            int stock = Integer.parseInt(stockStr);
//            if (stock <= 0) {
//                connection.unwatch();
//                return "库存不足";
//            }
//
//            if (connection.sIsMember(userKeyBytes, userIdBytes)) {
//                connection.unwatch();
//                return "你已经抢购过该商品";
//            }
//
//            connection.multi();
//            // 使用 increment 方法递减库存
//            redisTemplate.opsForValue().increment(productKey, -1);
//            connection.sAdd(userKeyBytes, userIdBytes);
//
//            List<Object> execResult = connection.exec(); // 注意返回类型
//            return execResult != null && !execResult.isEmpty() ? "抢购成功" : "抢购失败，请重试";
//        });
//
//    }
//
//    private int queryStockFromDb(String productId) {
//        // 模拟从数据库查询库存
//        return 100;
//    }
//}
